In [3]:
import numpy
from IPython import parallel
c = parallel.Client()
d = c[:]
d.block = True
with d.sync_imports():
    from random import random
    from math import pi


importing random from random on engine(s)
importing pi from math on engine(s)

In [26]:
def mcpi (n):
    s = 0
    for i in xrange(n):
        x = random()
        y = random()
        if x * x + y * y <= 1:
            s += 1
    return 4. * s / n

%timeit pi = mcpi(1000000)
pi


1 loops, best of 3: 448 ms per loop
Out[26]:
3.1415926535897931

In [25]:
def mcpi (n):
    s = 0
    for i in xrange(n):
        x = random()
        y = random()
        if x * x + y * y <= 1:
            s += 1
    return s

d['mcpi'] = mcpi

def multi_mcpi (n):
    k = len(d.targets)
    return 4. * sum(d.map(mcpi, [n / k] * k)) / n

%timeit pi = multi_mcpi(1000000)
pi


1 loops, best of 3: 306 ms per loop
Out[25]:
3.1415926535897931